package Day02;

public class Day02 {
    public static void main(String[] args) {
        //1)变量
        // 变化的 数量
        //专门用于存数据的容器
        //两大特性:
           //复用性 一次定义,多次使用
           //可变性 随时随地,依需可变
        //声明 初始化 访问 命名(今日讨论四个点)
        //声明 数据类型(int)+变量名(a<字母即可>)
           //int 整型 顾名思义 装整数的 (int a;)声明了一个整数型的变量叫a
           //声明多个整型变量时如下用逗号隔开:int a,b,c;(abc必须是同类型的)
        //初始化
           //=读作赋值 用于存储数值
           //第一次赋值叫做<初始化>
           //例如int a=5;声明同时初始化
           //int b;先声明
           //b=5;后初始化

        //访问 对其所存储的数据的访问
        //赋值运算最后做 先算等号后的运算

        //变量的命名
           //必须符合Java标识符的规则------给银行卡号命名
              //标识符 自己起的名字 与其他名字做区别
           //规定 必须遵守
           //1)只能包含字母 数字 _ 和$(CTRL 4)符,并且不能以数字开头
           //2)严格区分大小写
           //3)不能使用关键字(Java语言已经固定好的 有特殊含义的符号)
           //建议 最好遵守
              //允许中文命名 但不建议------建议"英文的见字知意",小驼峰命名法
                 //第一个单词首字母不大写 其余单词首字母大写 单个单词不大写
                 //大驼峰命名法(帕斯卡命名法) 每个单词首字母都大写 一般用于类的命名

        //2)java的基本类型(八种)
        //整数类型(四种)
        //byte(-128~127 -2^7~2^7-1) 1个字节
        //shout(-32768~32767 -2^15~2^15-1) 2个字节
        //int(二十亿多) 4个字节
        //long(九百万万亿多) 8个字节
           //区别 范围大小不同
        //浮点型(小数 两种)
        //float 4个字节
        //double(十六七位) 8个字节
           //区别 精度值不一样 小数点后的位数不一样
        //boolean(真假) 1个字节
        //char(存符号的) 2个字节
           //如性别


        //int
        //占四个字节 范围-2^31~2^31-1(正负21多亿)
        int a=5;
        int b=20000000;//都是占四个字节
        //特点
           //1 整数直接量默认为int类型,但不能超过范围,若超范围则发生编译错误
           //2 两个整数相除,结果还是整数 小数位无条件舍弃(同类型运算 得数是同类型 若不同类型运算 结果为范围大的类型)
        System.out.println(5/2);//2
        System.out.println(2/5);//0
        System.out.println(5.0/2);//2.5
        System.out.println(5/2.0);//2.5
           //3 运算时超范围 则发生溢出
              //溢出不是错误的 但要尽量避免
        int o=2147483647;//int最大值
        o=o+1;
        System.out.println(o);//-2147483648(int最小值),发生溢出了,需要避免
        //int值的大小是一个循环,若溢出了会从最小值开始累加数值,有可能是负数有可能是正数


        //long
        //长整型 占八个字节 范围-2^63~2^63-1(正负900万万亿多)
        //特点
           // 1 表示长整型直接量,需在数字后加L或l(建议写L) 不加的话默认int型
           // 2 运算时有可能溢出 建议在第一个数字后加L(往前放)


        //double
        //双精度浮点图 占用八个字节 不看范围 范围很大
        //特点
           //1小数直接量默认为double类型 若想表示float需在数字后加F或f
           //2不能表示精确数据 运算时可能发生舍入误差(也可能无误差)(float也有此缺陷)
              //精确运算场合不能使用double或float 一般使用BigDecimal(引用类型 小数没有误差)


        //boolean
        //布尔型 占1个字节
        //特点
           //1 只能储存true或false 只有true false两个直接量
           boolean X=true;//true为布尔型直接量
           boolean Y=false;//false为布尔型直接量


        //char
        //字符型 占用两个字节
        //特点
           //1 字符型直接量需放在单引号中,且只能放一个
              //汉字 数字 符号 空格(表示空格符) 字母
           //2 采用Unicode编码格式
              //Unicode 万国码 世界级通用字符合集 Java中的char采用的是其中最常用的子集(六万多个)
              //特点 一个字符对应一个码

        //记住ASCII(美国信息交换标准代码):'a'的码是97  'A'的码是65  '0'的码是48
        //字符6和数字6差48 其他数字同理 因为0的码是48
        char c8=65;//码在0到65535之间
        //输入码时不需要加引号

        System.out.println(c8);//A
        //println()会根据变量的类型做输出展示 int long double等
           //3 特殊符号输出需要通过\来转义 转义符
        //char c9=''';//编译错误
        char c1='\'';//表示半个单引号
        char c2='\\';//表示一个\(表示的是第二个\,第一个\为转义符)

        //字符与码相对应表示的查看方式
        int m='a';
        System.out.println(m);//97 查看字符对应的码
        char n=97;
        System.out.println(n);//a 查看码对应的字符


        //类型间的转换
        //两种转换形式
           //自动类型转换/隐式类型转换 由小范围到大范围时 系统自动转换
           //强制类型转换 由大范围到小范围时 需要强制转换
        //强制转换公式:
           //大范围类型 变量b=XXX;
           //小范围类型 变量a=(小范围类型)变量b;
        //例如:
        double Aa=3.33;
        int Bb=(int)Aa;
        System.out.println(Bb);//将double类型强制转换成int类型

        //两点转换规则
        //1 整数的直接量可以直接赋值给byte short char 但不能超范围
        byte b1=3;
        byte b2=3;
        int b3=(byte)(b1+b2);
        //2 byte short char型数据参与运算时 系统会将其自动转换为int类型再运算
        //强转>运算>赋值

        //红色表示编译错误














    }
}
